package cm.tl.pms.sys.service;

import cm.tl.pms.sys.controller.req.UserInfoReq;
import cm.tl.pms.sys.entity.SysUser;
import cm.tl.pms.sys.pojo.UserDataPower;
import com.github.yulichang.base.MPJBaseService;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author laker
 * @since 2021-08-05
 */
public interface ISysUserService extends MPJBaseService<SysUser> {

    SysUser getUserInfo();


    SysUser getUserAndDeptById(Long userId);

    /**
     * 根据用户id获取其所拥有的数据权限列表
     *
     * @param userId
     * @return
     */
    List<UserDataPower> getUserDataPowers(Long userId);


    /**
     * 根据用户id获取其角色
     *
     * @param userId
     * @return
     */
    long getRoleIdByUserId(Long userId);


    List<SysUser> getUsersBydeptIdAndRoleId(long deptId, int roleId);

    /**
     * 验证手机号是否为预留手机号
     *
     * @param phone
     * @return
     */
    boolean verifyPhone(String phone);

    /**
     * 验证用户名是否存在
     *
     * @param username
     * @return
     */
    boolean verifyUserName(String username);

    /**
     * 重置密码
     *
     * @param username
     * @param pass
     * @return
     */
    boolean passwordReset(String username, String pass);

    /**
     * 注册用户
     *
     * @param username
     * @param deptId
     * @param phone
     * @return
     */
    SysUser signIn(String username, Long deptId, String phone);


    /**
     * 注册用户-邮箱
     *
     * @param username
     * @param deptId
     * @param email
     * @return
     */
    SysUser signInEmail(String username, Long deptId, String email);

    /**
     * 修改用户信息
     *
     * @param userInfoReq
     * @return
     */
    boolean modifyUserInfo(UserInfoReq userInfoReq);

    /**
     * 验证用户和手机号
     *
     * @param username
     * @param phone
     * @return
     */
    boolean verifyUserNameAndPhone(String username, String phone);

    /**
     * 验证用户和邮箱
     *
     * @param username
     * @param email
     * @return
     */
    boolean verifyUserNameAndEmail(String username, String email);

    /**
     * 验证邮箱是否存在
     *
     * @param email
     * @return
     */
    boolean verifyEmail(String email);

}
